2. Modelado

De los resultados de búsqueda del search, se pueden obtener datos interesantes sobre cada publicación: un campo valioso es el de sold_quantity que hace referencia al total de ventas históricas de un ítem.

Utilizando los datos de nuestras Apis públicas, el desafío es el de armar un dataset y un modelo que permita predecir con atributos de la publicación el valor de sold_quantity.

Contenido del Notebook:

  1. Modelado

2.1 Preparación inicial de datos

Considerando el vistazo dado a los datos en la primera etapa, donde se logró describir y explorar los datos de diversas categorías de productos, surge ahora la necesidad de encontrar patrones y relaciones que se escapan a la vista humana. Para esto, recurrimos a las técnicas de modelado estadístico y/o de Machine Learning que permiten dar con dichos patrones.

Arrancamos entonces con la generación de los datos de manera similar a como se generaron en la etapa previa. Esta vez, nos enfocaremos en la categoría de "Celulares y Smartphones" y la cantidad de unidades vendidas presente en cada publicación de tal manera que se pueda comprender las variables más relacionadas con la estimación de dicha variable, en particular, para dar recomendaciones de negocio que ayuden a aumentar su valor.

Lo importante del reporte no es lo que muestra sino el uso que se le da a lo presentado. Así, lo que haremos ahora será elegir un subconjunto de variables considerando las advertencias que nos da el anterior reporte a modo de filtros:

  1. Quitamos variables que solo tienen un valor
  2. Quitamos variables con todos sus datos nulos
  3. Quitamos variables de ID demasiado desagregadas
  4. Solo por la naturaleza de este problema: Quitamos variables con pocas categorías y en demasiado desbalance
  5. Elegimos una de entre varias variables que pueden aportar lo mismo (alta correlación)

Las variables restantes se filtran del dataset y se repite la generación del reporte:

2.2 Generación de variables

Algunas variables siguen presentando problemas -por ejemplo, "title" presenta una enorme cardinalidad-, pero las dejamos solo porque las ocuparemos para una siguiente etapa de generación de variables. La idea es mejorar la calidad de las variables que entrarán al modelo, y la combinación, adecuación y generación de nuevas variables suelen ser más que útiles para conseguirlo.

Comenzamos:

2.3. Modelos:

En esta parte, revisamos primero si se trata de un problema de aprendizaje supervisado o no supervisado. Como está la variable sold_quantity como guía, hablamos de aprendizaje supervisado. Ahora, nos preguntamos si es un problema de Clasificación o de Regresión. En efecto, es un problema de Regresión siendo la variable numérica sold_quantity nuestra variable de interés y cuya variabilidad intentamos explicar a partir de las demás.

Vale la pena echarle un vistazo a una buena hoja de ruta que sugiere SAS, la popular firma de software estadístico, a la hora de elegir un algoritmo pertinente según la naturaleza de los datos y del problema:

Volviendo a lo nuestro, en lo concerniente a la selección de modelos, iniciamos con modelos simples y vamos aumentando su complejidad según se requiera. Por supuesto, para permitir comparaciones objetivas, tomaremos similares muestras de entrenamiento y prueba aún probando con diferentes modelos.

Regresión lineal múltiple

Este modelo es bastante potente y solo requiere que todas las variables estén en formato numérico. Como en este caso tenemos variables categóricas, tendremos que convertirlas a dummies primero. El resto es "carpintería":

Interpretación:
El coeficiente más grande lo encontramos en la variable descuento, así que parece ser la variable que explica en mayor medida la cantidad de unidades vendidas: Entre más grande el descuento, más serán las unidades vendidas. Por otra parte, que no sea de Bogotá y que no sea nuevo, afecta negativamente las unidades vendidas. Pero el ajuste no parece tan bueno si miramos su R^2 o simplemente la tabla entre los valores reales y sus predicciones -de hecho, discount ni siquiera aparece como significativa- así que podemos seguir jugando con las variables de entrada o pasar a otro modelo más avanzado.

Regresión LASSO

Esta nos ayuda a tratar el overfitting e incluso a realizar selección de variables -nos sugiere quitar variables con coeficientes cercanos a cero-. Primero, tenemos que elegir el mejor "alpha" para utilizar su método de regularización:

Interpretación:
Los resultados son muy parecidos a la regresión usual. Mucho por mejorar. Los errores, en particular, el MSE, no disminuyó.

Regresión Ridge

Podría probarse también con la regularización L2, para penalizar los coeficientes grandes a favor de los pequeños, exactamente lo que posibilita la Regresión Ridge. De nuevo, lo primero es elegir un buen alpha para trabajar:

Interpretación:
Los resultados son muy parecidos a los dos anteriores modelos -los errores poco cambian-, así que queda mucho por revisar en las variables independientes o explicativas, quizá no son las mejores o hace falta transformarlas. Por ahora, nos vamos con otro modelo.

Regresión Elástica o Elastic Net

Lo de elástica viene porque intenta equilibrar ambos tipos de regularización, el de la regresión Lasso y el de la regresión Ridge, pero esta vez la saltamos pues las primeras no dieron muy buenos resultados.

Random Forest

El último modelo por revisar es la generalización de los bosques aleatorios, Random Forest, útil en problemas de Clasificación así como en problemas de Regresión. Considerando la cantidad de variables categóricas, probablemente dará mejores resultados que los anteriores modelos. Arrancamos con una ligera trampa y es escalar las variables antes de meterlas al modelo.

Lanzamos enseguida un modelo Random Forest con un conjunto de parámetros básicos:

Interpretación:
Las variables precio y descuento se muestran como las más influyentes sobre la cantidad de unidades vendidas, y parece que los resultados mejoran si miramos el score en entrenamiento, pero hay un enorme problema: el error es enorme en los datos de prueba. Puede deberse a muchos factores, incluyendo un tamaño de muestra inadecuado o una mala elección de parámetros en el modelo que pueden estar causando sobreajuste en los datos de entrenamiento.

Entonces, en vez de hacerlo con parámetros "sacados del bolsillo", podemos armar una grilla de parámetros para probar combinaciones (en este caso, de número de árboles y porcentaje de características) y usar validación cruzada para tratar con el tema del sobreajuste.

Interpretación:
Finalmente se consigue la "mejor" selección de parámetros tras lanzar 200 modelos según la grilla elegida, pero claramente se siguen presentando problemas de sobreajuste, entonces, necesariamente hace falta remitirse a los datos originales para seguir transformando variables, eligiendo más de ellas, ampliando las muestras y, en general, iterando y registrando los resultados para su optimización.

2.4. Resultados y recomendaciones:

Claramente hace falta más trabajo en la parte de la generación de los datos para dar con una muestra más grande, generar nuevas variables y probar más configuraciones de modelos. Con datos más arreglados, y con muchas más muestras, podría probarse un XGBoost o una red neuronal, pero por ahora, no recurrimos a ellos hasta no mejorar la calidad de la data inicial.

En cuanto a recomendaciones, sí alcanza a haber pista de que los descuentos sobresalen en cuanto a la influencia en la cantidad de unidades vendidas, así que no sobra animar a la generación de campañas a favor de la publicación de descuentos por parte de los vendedores colombianos.

2.5. Mejoras en el código y siguientes pasos: